// ### 主要配置
// 域名  
// 接口路径
// 静态文件 路径
// http  默认配置(混入)
// http  状态码 过滤
// 路由拦截列表

// # token 缓存配置
const tokenConfig = {
	// 存储个人登录信息的 key名称
	userInfoKey: "userInfo_origin"
	// 存储个人信息登录 token key名称
	, userInfo_tokenKey: "token"
	// 请求头携带的 token key名称
	, header_tokenKey: "token"
	// 是否提示去登录 结合 http 异常状态处理函数   可造成异步阻断
	, noticToLogin: false
	// 设置个人信息缓存
	, setUserInfo_storage(userInfo) {
		if (userInfo) {
			const { userInfoKey } = tokenConfig;
			wx.setStorageSync(userInfoKey, userInfo);
		}
	}
	// 清除个人信息缓存
	, removeUserInfo_storage() {
		const { userInfoKey } = tokenConfig;
		return wx.removeStorageSync(userInfoKey);
	}
	// 获取个人信息缓存
	, getUserInfo_storage() {
		const { userInfoKey } = tokenConfig;
		return wx.getStorageSync(userInfoKey);
	}
	// 获取 token
	, getUserInfo_token() {
		const { getUserInfo_storage, userInfo_tokenKey } = tokenConfig;
		const userInfo_storage = getUserInfo_storage();
		if (userInfo_storage) {
			return userInfo_storage[userInfo_tokenKey] || "";
		}
	}
};


// #登录配置
// 默认小程序版本号 >= 2.10.4
const loginConfig = {
	url: "" //登录接口路径
	, method: "" //登录接口方法
	, notic: "您当前还没有登录哦！" //登录窗口默认提示
	// 登录接口转换 code  与 userInfo函数
	, transData({ userInfo, code }) {
		return {
			userInfo
			, code
		};
	}
	// 成功登录后回调函数 res=>接口返回参数  同步调用
	, loginCallback(res) {
		const page = this;
		tokenConfig.setUserInfo_storage(res.data);
		page.$log(res.msg);
	}
	// 询问  确定 与 取消事件
	, confirm({ success, fail , notic }) {
		// 如果没有提示登录询问
		if (!tokenConfig.noticToLogin) {
			wx.showModal({
				title: '提示',
				content: notic || loginConfig.notic,
				confirmText: "授权登录",
				confirmColor: "",
				showCancel: true,
				success(res) {
					if (res.confirm) {
						tokenConfig.removeUserInfo_storage();
						if( success && typeof success === "function" ){
							success();
						}
						
					} else if (res.cancel) {
						if( fail && typeof fail === "function" ){
							fail();
						}
						tokenConfig.noticToLogin = false;
					}
				}
			});
			tokenConfig.noticToLogin = true;
		}
	}
	// 登录
	, login() {
		const page = this;
		return new Promise((resolve, reject) => {
			//授权登录
			wx.getUserProfile({
				desc: '用于完善会员资料', // 声明获取用户个人信息后的用途，后续会展示在弹窗中，请谨慎填写
				success: (res) => {
					const { userInfo } = res;
					wx.login({
						success({ code }) {
							tokenConfig.noticToLogin = true;
							const { method, url, transData } = tokenConfig;
							page.$[method](url, transData({ userInfo , code }))
								.then(res => {
									loginConfig.loginCallback.call(page, res);
									resolve(res);
								}).catch(err => {
									page.$fail(err);
									reject({ errMsg: "api.fail" });
								});
						}
						, fail(err) {
							reject({ errMsg: "login.fail" });
						}
					});

				}
				, fail(err) {
					reject({ errMsg: "getUserProfile.cancel" });
				}
			});
		});
	}

};





const config = {
	// token 基本配置
	tokenConfig
	// 登录配置
	, loginConfig
	// 域名
	, $host: ""
	// 接口路径
	, $api: ""
	// 静态文件路径
	, $static: "/assets/images/"
	// appid 配置
	, appid: ""
	// 文件上传的接口路径 -- 图片
	, uploadFileApi_img: ""
	// 文件上传的接口路径 -- 视频
	, uploadFileApi_video: ""
	// http 默认参数配置  参数将进行浅合并方式并入  http默认配置
	//, http_default: {}
	/* 
	http非正常状态码拦截回调
	第一个参数为  responseData
	其执行优先级  大于 自定义回调
	仅适用走内置扩展方法 $request
*/
	/* 	, beforeFail(responseData , { page  , url} , next) {
			const { statusCode } = responseData;
			if (statusCode === 401) {
				next(`HTTP Error( code ): [ ${ url } ] statusCode=${statusCode} `, false);
			} else {
				next();
			}
		}  */

	/* 路由拦截  集合  配置项同vue一致  
		### 注意  此路由拦截配置   只针对 interceptRoutes.routes 里面配置的路由
		interceptRoutes  {
			// 拦截  全局拦截函数  
			beforeEnter({next,to,from}){}
			// 配合需要拦截的路由集合
			routes {
				// 三种类型  String RegExp Array
				// Array item必须为 String
				path
				// 路由拦截函数
				beforeEnter({next,to,from}){}
			}

		}
	*/
	/* , interceptRoutes: {
		routes: [
			{
				path: ""
				, beforeEnter({ next, to, from }) {}
			},
		]
	} */

}

module.exports = config;